package com.smh.demo1.a38;

import org.springframework.context.annotation.AnnotationConfigUtils;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.support.GenericApplicationContext;

/**
 * @author shiminghui
 * @date 2025/5/9 20:09
 * @description: TODO
 */
public class A38 {
    public static void main(String[] args) {

        GenericApplicationContext context = new GenericApplicationContext();
        // 注册一些常用的BeanFactory和Bean后处理器
        AnnotationConfigUtils.registerAnnotationConfigProcessors(context);

        context.registerBean("config", MyConfig.class);
        context.refresh();

        // 打印BeanDefinition
        // 诶,发现只有一个Bean1, 原来啊,spring的组件扫描会扫描本包下的所有类,每次启动都扫描一遍太耗费时间了
        // 所以,他有一个@Indexed注解, 带有这个注解的类可以在编译阶段被找到,将对应的类记录下来,生成spring.components文件
        // 以后运行时,spring会直接从文件中加载,从而提高启动速度,除非没有这个文件,或这个文件为空
        // 但是这个功能需要引入一个依赖.
        /*<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-context-indexer</artifactId>
            <optional>true</optional>
        </dependency>*/
        String[] beanDefinitionNames = context.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            System.out.println(beanDefinitionName);
        }

    }

    @ComponentScan
    static class MyConfig {
    }
}
